package cn.edu.szu;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;

public class Test {

    public static void main(String[] args) {

        new Test().signature();
    }

    // 测试消息摘要功能
    private void signature() {
        // 初始化文件
        File file = initFile();

        // 创建密钥生成器
        KeyGeneration keyGeneration = new KeyGeneration();

        // 创建数字签名工作类
        SignatureUtils signatureUtils = new SignatureUtils(keyGeneration);

        // 得到数字签名结果
        String result = signatureUtils.signature(file);

        System.out.println("数字签名：" + result);

        byte[] digest = signatureUtils.decrypt(result);

        System.out.println("解密后的消息摘要：" + Arrays.toString(digest));
    }

    // 加解密txt文本
    private void handleFile() {
        // 初始化文件
        File file = initFile();

        // 创建密钥生成器
        KeyGeneration keyGeneration = new KeyGeneration();

        // 创建加解密工具
        RSAUtils rsaUtils = new RSAUtils(keyGeneration);

        // 加密文件
        File encryptFile = rsaUtils.encrypt(file);

        // 解密文件
        rsaUtils.decrypt(encryptFile);

    }

    // 加解密字符串
    private void handleString() {

        StringBuilder result = new StringBuilder();

        // 创建密钥生成器
        KeyGeneration keyGeneration = new KeyGeneration();

        // 创建加密器
        RSAUtils encryptor = new RSAUtils(keyGeneration);
        String message = "Hello world!";

        result.append("原始消息为：" + message + "\n");

        // 加密明文
        String cipherText = encryptor.encrypt(message);

        result.append("加密完：\n");
        {
            int i = 0;
            int tempLen = 64;
            while (i < cipherText.length()) {
                if (i + tempLen < cipherText.length()) {
                    result.append(cipherText.substring(i, i + tempLen) + "\n");
                } else {
                    result.append(cipherText.substring(i) + "\n");
                }
                i += tempLen;
            }
        }

        // 解密密文
        String plainText = encryptor.decrypt(cipherText);

        result.append("解密完：" + plainText + "\n");

        System.out.println(result.toString());
    }

    // 初始化文件
    private File initFile() {
        // 初始化文本
        File file = new File("test.txt");
        try {
            FileWriter writer = new FileWriter(file);
            writer.write("学号2017163058，密码123456");
            writer.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return file;
    }
}
